import paramiko
import os
import subprocess

# 本地和远程文件路径
# 项目目录，需要切换成本地的
work_dir = "/Users/Rabit/workspace/coding/Java/gzdx/ruoyi-vue-plus/ruoyi-vue-service"
# 需要部署的jar名称
jar_name = 'ruoyi-vue-service.jar'
# 本地jar的路径
local_jar_path = '/Users/Rabit/workspace/coding/Java/gzdx/ruoyi-vue-plus/ruoyi-vue-service/ruoyi-admin/target/ruoyi-vue-service.jar'
# 服务器上部署jar的路径
remote_jar_path = '/root/java/jar/'

os.chdir(work_dir)
process = subprocess.run("mvn clean && mvn install", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
print(f"命令输出:\n{process.stdout}")
if process.stderr:
    print(f"错误:\n{process.stderr}")

# 远程服务器信息
remote_server = {
    'host': '175.178.202.165',
    'port': 22,
    'username': 'root',
    'password': 'w117217.',  # 或者使用私钥
    'pkey': None  # 如果使用私钥，则设置此值并注释掉password
}

# 使用私钥进行SSH连接（如果有的话）
if remote_server['pkey']:
    private_key = paramiko.RSAKey.from_private_key_file(remote_server['pkey'])
else:
    private_key = None

# SSH连接到远程服务器
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(remote_server['host'], remote_server['port'], remote_server['username'], password=remote_server['password'], pkey=private_key)

# 使用SCP上传JAR文件到远程服务器
sftp = ssh.open_sftp()
sftp.put(local_jar_path, remote_jar_path+jar_name)
sftp.close()

# docker启动命令初次需要在服务器上执行： docker run -d --name vontron-warehouse --link mysql:mysql --link redis:redis -v /root/java/jar:/home/vh  -p 8080:8080 -m 1024m vontron-warehouse-java:1.0
# 定义在远程服务器上执行的命令
commands = [
      f'cd {remote_jar_path} && pwd',  # 就是为了打印一下服务器的内容
      f'docker restart vontron-warehouse || true',  # 停止已存在的容器

]

# 在远程服务器上执行命令
for cmd in commands:
    stdin, stdout, stderr = ssh.exec_command(cmd)
    output = stdout.read().decode()
    error = stderr.read().decode()
    if error:
        print(f"错误: {error}")
    else:
        print(f"输出: {output}")
    stdin.close()
# 关闭SSH连接
ssh.close()

print(f"部署完成，稍等一分钟后访问")